package portal.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import portal.excepcion.DAOExcepcion;
import portal.modelo.Juegos;
import portal.modelo.Servicios;
import portal.util.ConexionBD;

public class JuegosDAO extends BaseDAO{

	public ArrayList<Juegos> listarJuegos() {

		ArrayList<Juegos> juegosLista = new ArrayList<Juegos>();
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		    try {
				String query = "SELECT idJuego, NombreJuego, descripcionJuego, materialesJuego, ROUND(CostoPorPersonaJuego,2), imagenJuego, fechaCreacionJuego, fechaModificacionJuego FROM Juego;";
				con = ConexionBD.obtenerConexion();
				stmt = con.prepareStatement(query);
				
				
				rs = stmt.executeQuery();
				while (rs.next()) {
					
					Juegos juegos = new Juegos(rs.getInt(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getDouble(5), rs.getString(6), rs.getString(7), rs.getString(8));
					juegosLista.add(juegos);
					
				}
			} catch (SQLException e) {
				System.err.println(e.getMessage());
				try {
					throw new DAOExcepcion(e.getMessage());
				} catch (DAOExcepcion e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			} finally {
				this.cerrarResultSet(rs);
				this.cerrarStatement(stmt);
				this.cerrarConexion(con);
			}
			return juegosLista;
	}

	public Boolean insertarJuego(Juegos a) throws DAOExcepcion {
		
		boolean status = Boolean.TRUE;
		String query = "call INSERT_JUEGO(?,?,?,?,?);";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setString(1, a.getNombreJuego());
			stmt.setString(2, a.getDescripcionJuego());
			stmt.setString(3, a.getMaterialesJuego());
			stmt.setDouble(4, a.getCostoPorPersonaJuego());
			stmt.setString(5, a.getImagenJuego());
			
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("NO INSERTO");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		
		return status;
	}

	public Boolean modificarJuego(Juegos a) throws DAOExcepcion {
		// TODO Auto-generated method stub
		boolean status = Boolean.TRUE;
		String query = "call UPDATE_JUEGO(?,?,?,?,?,?);";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, a.getIdJuego());
			stmt.setString(2, a.getNombreJuego());
			stmt.setDouble(3, a.getCostoPorPersonaJuego());
			stmt.setString(4, a.getDescripcionJuego());
			stmt.setString(5, a.getMaterialesJuego());
			stmt.setString(6, a.getImagenJuego());
			
			
			
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("NO MODIFICO");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		
		return status;
	}

	public Boolean eliminarJuegos(Juegos a) throws DAOExcepcion {
		// TODO Auto-generated method stub
		boolean status = Boolean.TRUE;
		String query = "call DELETE_JUEGO(?);";
		Connection con = null;
		PreparedStatement stmt = null;
		ResultSet rs = null;
		
		try {
			con = ConexionBD.obtenerConexion();
			stmt = con.prepareStatement(query);
			stmt.setInt(1, a.getIdJuego());
			
			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("NO MODIFICO");
			}
		} catch (SQLException e) {
			System.err.println(e.getMessage());
			throw new DAOExcepcion(e.getMessage());
		} finally {
			this.cerrarResultSet(rs);
			this.cerrarStatement(stmt);
			this.cerrarConexion(con);
		}
		
		return status;
	}

}
